﻿using System.ComponentModel.DataAnnotations;

namespace Xmart.Expressions.DynamicPredicate;

/// <summary>
/// 比较方式
/// </summary>
public enum CompareType : byte
{
    /// <summary>
    /// 有值
    /// </summary>
    [Display(Name = "有值")]
    HasValue = 1,
    /// <summary>
    /// 无值
    /// </summary>
    [Display(Name = "无值")]
    NotHasValue = 2,
    /// <summary>
    /// 为空
    /// </summary>
    [Display(Name = "为空")]
    Empty = 3,
    /// <summary>
    /// 不为空
    /// </summary>
    [Display(Name = "不为空")]
    NotEmpty = 4,
    /// <summary>
    /// 为真
    /// </summary>
    [Display(Name = "为真")]
    IsTrue = 5,
    /// <summary>
    /// 为假
    /// </summary>
    [Display(Name = "为假")]
    IsFalse = 6,
    /// <summary>
    /// 等于
    /// </summary>
    [Display(Name = "等于")]
    Equals = 7,
    /// <summary>
    /// 不等于
    /// </summary>
    [Display(Name = "不等于")]
    NotEquals = 8,
    /// <summary>
    /// 大于
    /// </summary>
    [Display(Name = "大于")]
    GreaterThan = 9,
    /// <summary>
    /// 大于或等于
    /// </summary>
    [Display(Name = "大于或等于")]
    GreaterThanOrEqual = 10,
    /// <summary>
    /// 小于
    /// </summary>
    [Display(Name = "小于")]
    LessThan = 11,
    /// <summary>
    /// 小于或等于
    /// </summary>
    [Display(Name = "小于或等于")]
    LessThanOrEqual = 12,
    /// <summary>
    /// 包含
    /// </summary>
    [Display(Name = "包含")]
    Contains = 13,
    /// <summary>
    /// 不包含
    /// </summary>
    [Display(Name = "不包含")]
    NotContains = 14,
    /// <summary>
    /// 以开始
    /// </summary>
    [Display(Name = "以开始")]
    StartsWith = 15,
    /// <summary>
    /// 不以开始
    /// </summary>
    [Display(Name = "不以开始")]
    NotStartsWith = 16,
    /// <summary>
    /// 以结束
    /// </summary>
    [Display(Name = "以结束")]
    EndsWith = 17,
    /// <summary>
    /// 不以结束
    /// </summary>
    [Display(Name = "不以结束")]
    NotEndsWith = 18,
    /// <summary>
    /// 在区间内
    /// </summary>
    [Display(Name = "在区间内")]
    Between = 19,
    /// <summary>
    /// 不在区间内
    /// </summary>
    [Display(Name = "不在区间内")]
    NotBetween = 20,
    /// <summary>
    /// 属于
    /// </summary>
    [Display(Name = "属于")]
    BelongTo = 21,
    /// <summary>
    /// 不属于
    /// </summary>
    [Display(Name = "不属于")]
    NotBelongTo = 22,
    /// <summary>
    /// 在列表中
    /// </summary>
    [Display(Name = "在列表中")]
    In = 23,
    /// <summary>
    /// 不在列表中
    /// </summary>
    [Display(Name = "不在列表中")]
    NotIn = 24,
    /// <summary>
    /// 项部分满足
    /// </summary>
    [Display(Name = "项部分满足")]
    ItemAny = 25,
    /// <summary>
    /// 项全部满足
    /// </summary>
    [Display(Name = "项全部满足")]
    ItemAll = 26,
    /// <summary>
    /// 正则匹配
    /// </summary>
    [Display(Name = "正则匹配")]
    RegexMatch = 27,
    /// <summary>
    /// 不正则匹配
    /// </summary>
    [Display(Name = "不正则匹配")]
    NotRegexMatch = 28,
    /// <summary>
    /// 有交集于
    /// </summary>
    [Display(Name = "有交集于")]
    HasIntersection = 29,
    /// <summary>
    /// 无交集于
    /// </summary>
    [Display(Name = "无交集于")]
    NotHasIntersection = 30,
    /// <summary>
    /// 全在列表中
    /// </summary>
    [Display(Name = "全在列表中")]
    AllIn = 31,
    /// <summary>
    /// 全不在列表中
    /// </summary>
    [Display(Name = "全不在列表中")]
    AllNotIn = 32,
    /// <summary>
    /// 包含所有
    /// </summary>
    [Display(Name = "包含所有")]
    ContainsAll = 33,
    //[Display(Name = "在范围内")]
    //InRange = 27,
    //[Display(Name = "不在范围内")]
    //NotInRange = 28,
    //[Display(Name = "附近")]
    //NearBy = 29,
    //[Display(Name = "不在附近")]
    //NotNearBy = 30,
    /// <summary>
    /// 自定义
    /// </summary>
    [Display(Name = "自定义")]
    Custom = 255,
}
